package cn.tedu._06interceptor.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 第一个拦截器
 */
public class MyInterCeptor implements HandlerInterceptor {
    /**
     * 1.请求到达处理器方法之前被此方法拦截
     * 2.可以做一些登录状态的校验,日志记录,编码格式的调整等
     * @param request 请求对象
     * @param response 响应对象
     * @param handler 处理器方法
     * @return  true代表放行,false代表结束,不会进行下一步资源的获取
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        return HandlerInterceptor.super.preHandle(request, response, handler);
        System.out.println("1.第一个拦截器的preHandle方法调用");
        return true; //放行
    }

    /**
     * 1.处理器方法完成之后,将响应拦截
     * 2.前提:preHandle方法中一定是返回true放行
     * @param request 请求对象
     * @param response 响应对象
     * @param handler 处理器方法
     * @param modelAndView 模型数据和视图名
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        System.out.println("2.第一个拦截器的postHandle方法的调用");
    }

    /**
     * 前段控制器将最终响应返回给客户端时,被此方法拦截
     * @param request 请求对象
     * @param response 响应对象
     * @param handler 处理器方法
     * @param ex 异常对象
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        System.out.println("3.第1个拦截器的afterCompletion方法被调用");
    }
}
